---
title: ProcessOB3PRetention operational runbook
summary: How to run, schedule, monitor, and triage ProcessOB3PRetention, including exit codes and error scenarios.
status: draft
owner: Documents
last_reviewed: 2026-10-22
---

# ProcessOB3PRetention operational runbook

This runbook covers running and troubleshooting `ProcessOB3PRetention.exe`. The full argument contract is on the [Arguments](arguments.md) page.

## Invocation

| Item | Value |
| --- | --- |
| Command | `ProcessOB3PRetention.exe` |
| Arguments | Optional `Day`, `Month`, `Year`; see [Arguments](arguments.md) |
| Default behavior | Processes the current local date |
| Example | `ProcessOB3PRetention.exe -Month 3 -Day 31 -Year 2026` |

## Scheduling

| Attribute | Value |
| --- | --- |
| Scheduler | Automic (UC4) job plan `ARCH.ONBASE.PROCESS.3P.RETENTION.EOM` |
| Frequency | Not determined from source** |
| Arguments passed by scheduler | Unknown** |
| Interpretation of `EOM` | End-of-month run*; unconfirmed |

## Console output

| Output | Stream | Meaning |
| --- | --- | --- |
| `ThirdPartyRetentionProcessor began at (time).` | stdout | Application started |
| `SAIF Claim Num: n - Close Date: d` | stdout | One line per eligible claim |
| `Processing n claims in b batch(es) of up to size.` | stdout | Batch plan |
| `Claims sent to OnBase for Retention Processing.  OnBase Document ID: id` | stdout | Batch archived |
| `THRDPARTY_RETENTION records marked as processed.  ID List:` | stdout | Batch marked |
| `No claims eligible for retention policy deletion.` | stdout | Nothing to do (exit 0) |
| `Error: message` | stderr | Unhandled exception caught by `Execute` and reported before exit (exit 5); argument-validation failures instead exit 1 with no `Error:` line, and application-resolution/startup failures also exit 5 but are reported directly by the runner without an `Error:` line |
| `Invalid arguments list (n total):` | stderr | Argument failure (exit 1) |
| `Exit Code: n` | stdout | Final exit code |

## Log files

| Destination | Used |
| --- | --- |
| `file0` to `file4` | Not used by this application |
| Scheduler capture of stdout and stderr | Only persisted log, if configured* |

## Environment configuration

| Setting | Required | Notes |
| --- | --- | --- |
| `imagingapiurl` | Yes | Missing or empty fails the run before any work |
| `ProcessOB3PRetention.WSPEndPointUrl` | Yes | OnBase SOAP address |
| `processob3pretention.processbatchsize` | Yes (read when claims exist) | Empty, non-integer, or non-positive values fall back to 100; a missing key fails the run. Seeded as 200 for prod, entqa, and npuat |
| `EnvironmentApiUrl` | Yes | Machine environment variable for the Environment API |

See [Configuration](configuration.md) for detail.

## Exit codes (triage)

| Code | Meaning | First action |
| --- | --- | --- |
| 0 | Success or nothing to process | None |
| 1 | Invalid `Day`, `Month`, or `Year` value | Correct the argument and rerun |
| 5 | Runtime failure | For a startup/resolution failure (no `Error:` line, no start header — see [Run lifecycle](run-lifecycle.md#failure-behavior)), inspect the runner's reported exception on stderr directly; for a failure during processing, read the `Error:` line. Use the scenarios below either way. |

## Error scenarios

| Symptom | Likely cause | Action |
| --- | --- | --- |
| `ApplicationException` about a setting | Environment API key missing | Add the key for the track; see [Configuration](configuration.md) |
| `UriFormatException` | `imagingapiurl` is empty | Set a valid URL |
| Imaging API exception | Service unavailable or credentials rejected | Check the Imaging API; the client already retried transient statuses |
| OnBase `FaultException`, `CommunicationException`, or timeout | OnBase endpoint unreachable or rejecting the call* | Check the OnBase service and endpoint address |
| Run failed after the OnBase log line but before the marked line | Mark-processed call failed | Rerun; the batch may be resubmitted to OnBase* |
| Exit 0 with no claims on a day that should have claims | Empty or unparseable API response is treated as none* | Verify the Imaging API response for the date |

Rerunning is the only recovery path; completed batches are not rolled back. See [BR-OB3P-007](business-rules.md#br-ob3p-007-any-error-stops-the-run-without-rollback). Whether OnBase deletes documents after a submission is unknown.**

## Monitoring

| Signal | Source |
| --- | --- |
| Scheduler job status | Verify the Automic job result and its configured exit-code mapping** |
| Final line `Exit Code: n` | Captured stdout |
| Traces | Optional OpenTelemetry export via `OTEL_EXPORTER_OTLP_*` |
| Duplicate error text on stderr | Expected; the error is written and then rethrown |

## Related documentation

| Documentation | Description |
| --- | --- |
| [Index](index.md) | Documentation entry point |
| [Overview](overview.md) | Purpose and capabilities |
| [Architecture](architecture.md) | Components and composition root |
| [Run lifecycle](run-lifecycle.md) | Execution flow and exit codes |
| [Arguments](arguments.md) | Argument contract |
| [Configuration](configuration.md) | Settings and environment variables |
| [Dependencies](dependencies.md) | Packages and API dependencies |
| [Operations and processes](operations-processes.md) | Operation catalog |
| [Business rules](business-rules.md) | Rules enforced during processing |
| [Tech debt](tech-debt.md) | Technical debt observations |

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts. Statements marked with `**` could not be confirmed; treat
> as unknown until verified.

## Sources

- `README.md`
- `ProcessOB3PRetention/Program.cs`
- `ProcessOB3PRetention/ThirdPartyRetentionProcessor.cs`
- `ProcessOB3PRetention/App.config`
- `environmentSettings/settings.yml`
- `Pipelines/release.yml`
